import axios from 'axios'
import type { AxiosInstance, InternalAxiosRequestConfig , AxiosResponse, AxiosError } from 'axios'

// 创建 axios 实例
const http: AxiosInstance = axios.create({
  // 根据实际后端地址修改
  baseURL: import.meta.env.DEV ? 'http://127.0.0.1:57805' : window.location.origin,
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
http.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    // 可以在这里添加认证token等
    // const token = localStorage.getItem('token')
    // if (token && config.headers) {
    //   config.headers.Authorization = `Bearer ${token}`
    // }
    return config
  },
  (error: AxiosError) => {
    return Promise.reject(error)
  }
)

// 响应拦截器
http.interceptors.response.use(
  (response: AxiosResponse) => {
    // 可以根据后端返回格式进行处理
    return response.data
  },
  (error: AxiosError) => {
    // 统一错误处理
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // 未授权处理
          console.error('未授权，请重新登录')
          break
        case 403:
          // 禁止访问处理
          console.error('拒绝访问')
          break
        case 404:
          // 页面不存在处理
          console.error('请求地址出错')
          break
        case 500:
          // 服务器内部错误
          console.error('服务器内部错误')
          break
        default:
          console.error(`错误: ${error.response.status}`)
      }
    } else if (error.request) {
      // 请求已发出但没有收到响应
      console.error('网络错误，请检查网络连接')
    } else {
      // 其他错误
      console.error('请求失败', error.message)
    }
    return Promise.reject(error)
  }
)

export default http